home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / txl / modula2.lha / Modula2 / Modula2.Grammar next >
Text File  |  1993-07-19  |  8KB  |  485 lines

  1. % Die Syntax von Modula-2
  2. %    aus Anhang 1, Niklaus Wirth,
  3. %    "Programmieren in Modula-2", Springer Verlag 1985
  4. % J.R. Cordy, GMD Karlsruhe, 23.10.90
  5.  
  6. compounds
  7.     <>  <=  >=  ..  := 
  8. end compounds
  9.  
  10. comments
  11.       (* *)
  12. end comments
  13.  
  14. keys
  15.     IN  OR  DIV  MOD  AND  NOT 
  16.     ARRAY  OF  RECORD  END  CASE  ELSE  SET  POINTER  TO  PROCEDURE 
  17.     VAR  EXIT  RETURN  IF  THEN  WHILE  DO  REPEAT  UNTIL  FOR  BY 
  18.     LOOP  WITH  BEGIN  MODULE  EXPORT  QUALIFIED 
  19.     FROM  IMPORT  DEFINITION  IMPLEMENTATION
  20. end keys
  21.  
  22. define program 
  23.     [CompilationUnit]
  24. end define
  25.  
  26. define qualident
  27.     [id] [repeat dot_Ident]
  28. end define
  29.  
  30. define dot_Ident
  31.     . [id]
  32. end define
  33.  
  34. define ConstantDeclaration
  35.     [id] = [ConstExpression]    
  36. end define
  37.  
  38. define ConstExpression
  39.     [SimpleConstExpr] [repeat relation_SimpleConstExpr]
  40. end define
  41.  
  42. define relation_SimpleConstExpr
  43.       [relation] [SimpleConstExpr]
  44. end define
  45.  
  46. define relation
  47.     = | # | <> | < | <= | > | >= | IN
  48. end define
  49.  
  50. define SimpleConstExpr
  51.       [opt sign]  [ConstTerm] [repeat AddOperator_ConstTerm]
  52. end define
  53.  
  54. define sign
  55.     + | -
  56. end define
  57.  
  58. define AddOperator_ConstTerm
  59.     [AddOperator] [ConstTerm]
  60. end define
  61.  
  62. define AddOperator
  63.     + | - | OR
  64. end define
  65.  
  66. define ConstTerm
  67.     [ConstFactor] [repeat MulOperator_ConstFactor]
  68. end define
  69.  
  70. define MulOperator_ConstFactor
  71.     [MulOperator] [ConstFactor]
  72. end define
  73.  
  74. define MulOperator
  75.     * | / | DIV | MOD | AND | &
  76. end define
  77.  
  78. define ConstFactor
  79.     [qualident]
  80.     |    [number]
  81.     |    [stringlit]
  82.     |    [ConstSet]
  83.     |    ( [ConstExpression] )
  84.     |    NOT [ConstFactor]
  85. end define
  86.  
  87. define ConstSet
  88.     [qualident] { [list ConstElement] }
  89. end define
  90.  
  91. define ConstElement
  92.     [ConstExpression] [opt dotdot_ConstExpression]
  93. end define
  94.  
  95. define dotdot_ConstExpression
  96.     .. [ConstExpression]
  97. end define
  98.  
  99. define TypeDeclaration
  100.     [id] = [type]
  101. end define
  102.  
  103. define type 
  104.     [SimpleType]
  105.     |    [ArrayType]
  106.     |    [RecordType]
  107.     |    [SetType]
  108.     |    [PointerType]
  109.     |    [ProcedureType]
  110. end define
  111.  
  112. define SimpleType
  113.     [qualident]
  114.     |    [enumeration]
  115.     |    [SubrangeType]
  116. end define
  117.  
  118. define enumeration
  119.     ( [IdentList] )
  120. end define
  121.  
  122. define IdentList
  123.     [list id+]
  124. end define
  125.  
  126. define SubrangeType
  127.     [opt id] '[ [ConstExpression] .. [ConstExpression] ']
  128. end define
  129.  
  130. define ArrayType
  131.     ARRAY [list SimpleType+] OF [type]
  132. end define
  133.  
  134. define RecordType
  135.                     [IN][NL]
  136.     RECORD             [NL][IN]
  137.         [FieldListSequence]    [NL][EX]
  138.     END            [EX]
  139. end define
  140.  
  141. define FieldListSequence
  142.     [FieldList] [repeat semi_FieldList]    
  143. end define
  144.  
  145. define semi_FieldList
  146.     ;        [NL]
  147.     [FieldList]
  148. end define
  149.  
  150. define FieldList
  151.     [IdentList] : [type]
  152.     |    CASE [opt id] : [qualident] OF         [IN][NL]
  153.         [variant]                 
  154.         [repeat or_variant]
  155.         [opt else_FieldListSequence]    [EX]
  156.     END
  157. end define
  158.  
  159. define or_variant
  160.     OR [variant]    
  161. end define
  162.  
  163. define else_FieldListSequence
  164.     ELSE             [IN][NL]
  165.         [FieldListSequence]    [EX][NL]
  166. end define
  167.  
  168. define variant
  169.     [CaseLabelList] :     [IN][NL]
  170.         [FieldListSequence]    [EX][NL]
  171. end define
  172.  
  173. define CaseLabelList
  174.     [list CaseLabels+]
  175. end define
  176.  
  177. define CaseLabels
  178.     [ConstExpression] [opt dotdot_ConstExpression]
  179. end define
  180.  
  181. define SetType
  182.     SET OF [SimpleType]
  183. end define
  184.  
  185. define PointerType
  186.     POINTER TO [type]
  187. end define
  188.  
  189. define ProcedureType
  190.     PROCEDURE [FormalTypeList]
  191. end define
  192.  
  193. define FormalTypeList
  194.     ( [list optVar_FormalType+] ) [opt ProcedureResult]
  195. end define
  196.  
  197. define optVar_FormalType
  198.     [opt 'VAR] [FormalType]
  199. end define
  200.  
  201. define VariableDeclaration
  202.     [IdentList] : [type]
  203. end define
  204.  
  205. define designator
  206.     [qualident] [repeat dotSubscriptOrArrow]
  207. end define
  208.  
  209. define dotSubscriptOrArrow
  210.     . [id]
  211.     |    '[ [ExpList] ']
  212.     |    ^
  213. end define
  214.  
  215. define ExpList
  216.     [list expression+]
  217. end define
  218.  
  219. define expression
  220.     [SimpleExpression] [opt relation_SimpleExpression]
  221. end define
  222.  
  223. define relation_SimpleExpression
  224.     [relation] [SimpleExpression]
  225. end define
  226.  
  227. define SimpleExpression
  228.     [opt sign] [term] [repeat AddOperator_term]
  229. end define
  230.  
  231. define AddOperator_term
  232.     [AddOperator] [term]
  233. end define
  234.  
  235. define term
  236.     [factor] [repeat MulOperator_factor]
  237. end define
  238.  
  239. define MulOperator_factor
  240.     [MulOperator] [factor]
  241. end define
  242.  
  243. define factor
  244.     [number]
  245.     |    [stringlit]
  246.     |    [set]
  247.     |    [designator] [opt ActualParameters]
  248.     |    ( [expression] )
  249.     |    NOT [factor]
  250. end define
  251.  
  252. define set
  253.     [opt qualident] { [list element] }
  254. end define
  255.  
  256. define element
  257.     [expression] [opt dotdot_expression]
  258. end define
  259.  
  260. define dotdot_expression
  261.     .. [expression]
  262. end define
  263.  
  264. define ActualParameters
  265.     ( [opt ExpList] )
  266. end define
  267.  
  268. define statement
  269.     [assignment]
  270.     |    [ProcedureCall]
  271.     |    [IfStatement]
  272.     |    [CaseStatement]
  273.     |    [WhileStatement]
  274.     |    [RepeatStatement]
  275.     |    [LoopStatement]
  276.     |    [ForStatement]
  277.     |    [WithStatement]
  278.     |    EXIT
  279.     |    RETURN [opt expression]
  280. end define
  281.  
  282. define assignment
  283.     [designator] := [expression]
  284. end define
  285.  
  286. define ProcedureCall
  287.     [designator] [opt ActualParameters]
  288. end define
  289.  
  290. define StatementSequence
  291.     [statement] [repeat semi_statement] [opt ';]    [NL]
  292. end define
  293.  
  294. define semi_statement
  295.     ;         [NL]
  296.     [statement]
  297. end define
  298.  
  299. define IfStatement
  300.     IF [expression] THEN        [IN][NL]
  301.         [StatementSequence]        [EX]
  302.     [repeat elsif_clause]
  303.     [opt else_StatementSequence]
  304.     END    
  305. end define
  306.  
  307. define elsif_clause
  308.     ELSIF [expression] THEN     [IN][NL]
  309.         [StatementSequence]        [EX]
  310. end define
  311.  
  312. define else_StatementSequence
  313.     ELSE                 [IN][NL]
  314.         [StatementSequence]        [EX]
  315. end define
  316.  
  317. define CaseStatement
  318.     CASE [expression] OF            [IN][NL]
  319.         [case] 
  320.         [repeat or_case]
  321.         [opt else_StatementSequence]    [EX]
  322.     END
  323. end define
  324.  
  325. define or_case
  326.     '| [case]
  327. end define
  328.  
  329. define case
  330.     [CaseLabelList] :     [IN][NL]
  331.         [StatementSequence]    [EX]
  332. end define
  333.  
  334. define WhileStatement
  335.     WHILE [expression] DO    [IN][NL]
  336.         [StatementSequence]    [EX]
  337.     END
  338. end define
  339.  
  340. define RepeatStatement
  341.     REPEAT            [IN][NL]
  342.         [StatementSequence]    [EX]
  343.     UNTIL [expression]
  344. end define
  345.  
  346. define ForStatement
  347.     FOR [id] := [expression] TO [expression] [opt by_ConstExpression] DO    [IN][NL]
  348.         [StatementSequence]    [EX]
  349.     END
  350. end define
  351.  
  352. define by_ConstExpression
  353.     BY [ConstExpression]
  354. end define
  355.  
  356. define LoopStatement
  357.     LOOP            [IN][NL]
  358.         [StatementSequence]    [EX]
  359.     END
  360. end define
  361.  
  362. define WithStatement
  363.     WITH [designator] DO    [IN][NL]
  364.         [StatementSequence]    [EX]
  365.     END
  366. end define
  367.  
  368. define ProcedureDeclaration
  369.                 [NL]
  370.     [ProcedureHeading] ;    
  371.     [block] [id]        
  372. end define
  373.  
  374. define ProcedureHeading
  375.     PROCEDURE [id] [opt FormalParameters]
  376. end define
  377.  
  378. define block
  379.                 [NL]
  380.     [repeat declaration]    
  381.     BEGIN            [IN][NL]
  382.         [StatementSequence]    [EX]
  383.     END
  384. end define
  385.  
  386. define declaration
  387.     CONST                     [IN][NL]
  388.         [repeat ConstantDeclaration_semi]    [EX]
  389.     |    TYPE                     [IN][NL]
  390.         [repeat TypeDeclaration_semi]    [EX]
  391.     |    VAR                     [IN][NL]
  392.         [repeat VariableDeclaration_semi]    [EX]
  393.     |    [ProcedureDeclaration] ;        [NL][NL]
  394.     |    [ModuleDeclaration] ;            [NL][NL]
  395. end define
  396.  
  397. define ConstantDeclaration_semi
  398.     [ConstantDeclaration] ;    [NL]
  399. end define
  400.  
  401. define TypeDeclaration_semi
  402.     [TypeDeclaration] ;    [NL]
  403. end define
  404.  
  405. define VariableDeclaration_semi
  406.     [VariableDeclaration] ;    [NL]
  407. end define
  408.  
  409. define FormalParameters
  410.     ( [FPSection] [repeat semi_FPSection] ) [opt ProcedureResult]
  411. end define
  412.  
  413. define semi_FPSection
  414.     ; [FPSection]
  415. end define
  416.  
  417. define FPSection
  418.     [opt 'VAR] [IdentList] : [FormalType]
  419. end define
  420.  
  421. define FormalType
  422.     [opt array_of] [qualident]
  423. end define
  424.  
  425. define ProcedureResult
  426.     : [qualident]
  427. end define
  428.  
  429. define array_of
  430.     ARRAY OF
  431. end define
  432.  
  433. define ModuleDeclaration
  434.                     [NL]
  435.     MODULE [id] [opt priority] ;    [NL][NL]
  436.         [repeat import]
  437.         [opt export]
  438.         [block] [id] ;        [NL]
  439. end define
  440.  
  441. define priority
  442.     '[ [ConstExpression] ']
  443. end define
  444.  
  445. define export
  446.     EXPORT [opt 'QUALIFIED] [IdentList] ;    [NL]
  447. end define
  448.  
  449. define import
  450.     [opt from_ident] IMPORT [IdentList] ;    [NL]
  451. end define
  452.  
  453. define from_ident
  454.     FROM [id]
  455. end define
  456.  
  457. define DefinitionModule
  458.                     [NL]
  459.     DEFINITION MODULE [id] ;    [NL][NL]
  460.         [repeat import]
  461.         [repeat definition]
  462.     END [id] .            [NL]
  463. end define
  464.  
  465. define definition
  466.     CONST                     [IN][NL]
  467.         [repeat ConstantDeclaration_semi]    [EX]
  468.     |    TYPE                     [IN][NL]
  469.         [repeat TypeDeclaration_semi]    [EX]
  470.     |    VAR                     [IN][NL]
  471.         [repeat VariableDeclaration_semi]    [EX]
  472.     |    [ProcedureHeading] ;            [NL]
  473. end define
  474.  
  475. define ProgramModule
  476.     MODULE [id] [opt priority] ;    [NL][NL]
  477.         [repeat import]
  478.         [block] [id] .        
  479. end define
  480.  
  481. define CompilationUnit
  482.     [DefinitionModule] 
  483.     |    [opt 'IMPLEMENTATION] [ProgramModule]
  484. end define
  485.